//
//  main.c
//  for循环
//
//  Created by ws on 2017/7/17.
//  Copyright © 2017年 王松. All rights reserved.
//

#include <stdio.h>

/**
for循环格式:
 for(初始化循环表达式(控制循环变量);条件表达式;循环后操作表达式){
 循环体...
 ...
 }
 初始化循环表达式(控制循环变量):在循环开始前进进执行一次,之后再也不执行了
 条件表达式:在每一次循环开始的时候,都会执行循环表达式,如果条件满足,就执行循环体中的语句,如果条件不满足,就结束循环
 循环后操作表达式:当每一次循环结束的时候都会执行循环后操作表达式
 
 执行顺序:
 1.执行初始化循环表达式(控制循环变量);
 2.条件表达式,如果条件为真就执行(步骤3),如果条件不满足就结束循环
 3.执行循环体中的语句
 4.执行循环后操作表达式
 5.回到步骤(2)
 
 注意点:
 1.for小括号后面不能直接跟分号
 2.作用域混乱:你要在循环体中定义变量就必须要有大括号
 3.在for循环外部不可以访问for循环小括号中定义的变量
 4.循环体中定义的变量在for循环小括号中不能访问(意思就是小括号的作用域范围大于循环体的作用域范围)
 */
void test(){
    for (int i = 0; i < 5; i ++) {
        printf("%d\n",i);
    }
}
/**
 小括号后面不能直接跟分号
 */
void test1(){
//    for (int i = 0; i < 5; i ++);{//此处不能写分号
//        printf("%d\n",i);
//    }
}
/**
 作用域混乱:你要在循环体中定义变量就必须要有大括号
 */
void test2(){
//    for (int i = 0; i < 5; i ++)
//        int num = 10;//作用域混乱
}
/**
 1.在for循环外部不可以访问for循环小括号中定义的变量
 2.循环体中定义的变量在for循环小括号中不能访问(意思就是小括号代码块的作用域范围大于循环体代码块的作用域范围)
 */
void test3(){
    //在for循环外部不可以访问for循环小括号中定义的变量
    for (int i = 0; i < 5; i ++){
        int j = 0;
        printf("%d\n",i);
    }
    //     printf("%d\n",i);
    
}
void test4(){
    //循环体中定义的变量在for循环小括号中不能访问(意思就是小括号的作用域范围大于循环体的作用域范围)
//    for (int i = 0; i < 5; j ++){
//        int j = 0;
//        printf("%d\n",i);
//    }
    
}
/**
 如果条件表达式不写系统默认条件表达式为真
 死循环
 */
void test5(){
    for (; ; ) {
        printf("死循环");
    }
}
/**
 for与while
 1.for循环不容易出错
 2.代码更加整洁,可读性更好
 3.当整个循环结束后,还需要使用循环控制变量的时候,就用while
 */
int main(int argc, const char * argv[]) {
    //for循环中的作用域
    for (int i = 0; i < 5; i ++){
        int j = 0;
        printf("%d\n",i);
    }
    return 0;
}
